package controller

import (
	"go_gin_bubble/dao"
	"go_gin_bubble/models"
	"net/http"

	"github.com/gin-gonic/gin"
	// "gorm.io/gorm"
)

/*
 url     --> controller  --> logic   -->    Dao
请求来了  -->  控制器      --> 业务逻辑  --> 模型层的增删改查
*/

//自定义

func IndexHandler(c *gin.Context) {
	c.HTML(http.StatusOK, "index.html", nil)
}

func AddTodo(c *gin.Context) {
	//前端写入信息，提交，到这里处理
	//在路由处做好映射即可  此处相当于serlvet 做好mapping
	//取数据
	var todo models.Todo
	c.BindJSON(&todo)
	//存入数据库
	affectRows,err := dao.AddOneTodo(&todo)
	if affectRows==0 || err!=nil {
		c.JSON(http.StatusOK, gin.H{"error":err.Error()})
	}else{
		c.JSON(http.StatusOK, todo)
	}

}


func GetTodoList(c *gin.Context) {
	//查询所有数据
	todoList,affectRows, err := dao.QueryAllItems()
	if affectRows==0 || err!=nil{
		c.JSON(http.StatusOK, gin.H{"error":err.Error()})
	}else{
		c.JSON(http.StatusOK,todoList)
	}
}

func UpdateOneTode(c *gin.Context) {
	id,ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{"error":"无效id"})
		return 
	}
	todo,rows,err := dao.QueryOneItem(id)
	if err!=nil || rows ==0{
		c.JSON(http.StatusOK,gin.H{"error":err.Error()})
		return 
	}
	c.BindJSON(&todo)
	if _,err = dao.UpdateOneTodo(todo);err!=nil{
		c.JSON(http.StatusOK, gin.H{"error":err.Error()})
	}else{
		//返回更新结果
		c.JSON(http.StatusOK, todo)
	}


}


func DeleteOneTodo(c *gin.Context){
	//取得id
	id,ok := c.Params.Get("id")
	if !ok {
		c.JSON(http.StatusOK, gin.H{"error":"无效id"})
		return 
	}
	if _,err:= dao.DeleteOneTodo(id);err!=nil {
		c.JSON(http.StatusOK, gin.H{"error":err.Error()})
	}else{
		c.JSON(http.StatusOK, gin.H{id:"deleted"})
	}
}

